<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>

</body>
<script>
    // var a;
    // let const 和 var  

    // 共同点:
    // 都是定义变量的关键字 => 局部变量和全局变量

    // 区别:
    // 1.  var  ES5以及之前,官方规定的用于定义变量的关键字, let const ES6新增用于定义变量的关键字
    // 2.  var声明的变量有变量提升,let const声明的变量没有变量提升
    // 3.  var声明的变量可以重复声明,let const声明的变量没有重复声明(同一作用域下)
    //     let声明的是普通变量, 不能重复声明,但是可以重新赋值
    //     const声明的是常数变量(常量), 不能重复声明, 第一次赋值之后,后续无法再次修改该变量  
    // 4.  ES6新增块级作用域, 在块级作用域 let和const中声明的变量是局部的 块级作用域对var没有影响(函数外 => 全局 函数内 => 局部)
    // 5. var声明的全局变量 会存储到window中,let const声明的全局变量 不会存储到window中,存储到脚本作用域中,可以全局访问,但是不能通过window访问


    // 关于变量提升: 
    // 报错:Cannot access 'b' before initialization  初始化之前无法访问b
    // 报错:Cannot access 'c' before initialization  初始化之前无法访问c
    // console.log(a, b, c);

    var a = 10;
    let b = 20;
    const c = 30;
    console.log(a, b, c);

    // 关于重新声明
    // var a = 100;  // 100
    // let b = 200;  // 报错: Identifier 'b' has already been declared => 标识符“b”已声明
    // let c = 300;  // 报错: Identifier 'b' has already been declared => 标识符“b”已声明
    // console.log(a, b, c);


    // 关于重新赋值
    // a = 100;
    // b = 200;
    // c = 200;
    // console.log(a, b, c);

    const user = "admin";
    const pwd = "123456";







</script>

</html>